package controllers;

import java.util.Iterator;
import java.util.Set;

import modelo.Asignacion;
import modelo.Empleado;
import modelo.Horario;
import modelo.Planificacion;

import org.joda.time.LocalDate;
import org.joda.time.LocalTime;

import play.*;
import play.mvc.*;
import views.html.*;

import play.libs.Json;
import database.Tienda;

public class Application extends Controller {
	
	private static boolean firstRun=true;
	
	private static void populateDatabase(){
		firstRun=false;
    	Tienda tienda = Tienda.getInstance();
    	LocalDate hoy=new LocalDate();
    	
    	Horario turnoMañana=new Horario(new LocalTime(0, 0), new LocalTime(8, 0));
    	Horario turnoTarde=new Horario(new LocalTime(8, 0), new LocalTime(16, 0));
    	Horario turnoNoche=new Horario(new LocalTime(16, 0), new LocalTime(23, 59));
    	
    	Empleado e1=new Empleado("Obi-Wan", "Kenobi");
    	Empleado e2=new Empleado("Luke", "Skywalker");
    	Empleado e3=new Empleado("Han", "Solo");
    	tienda.guardarEmpleado(e1);
    	tienda.guardarEmpleado(e2);
    	tienda.guardarEmpleado(e3);
    	
    	//Primera planificacion   	
    	Asignacion plani1asig1=new Asignacion(turnoMañana);
    	plani1asig1.setEmpleadoAsignado(e1);
    	Asignacion plani1asig2=new Asignacion(turnoTarde);
    	plani1asig2.setEmpleadoAsignado(e2);
    	Asignacion plani1asig3=new Asignacion(turnoNoche);
    	plani1asig3.setEmpleadoAsignado(e3);
    	
    	Planificacion plani1 = new Planificacion(hoy);
    	plani1.agregarAsignacion(plani1asig1);
    	plani1.agregarAsignacion(plani1asig2);
    	plani1.agregarAsignacion(plani1asig3);
    	tienda.agregarPlanificacion(plani1);
    	
    	//Segunda planificacion
    	Asignacion plani2asig1=new Asignacion(turnoMañana);
    	plani2asig1.setEmpleadoAsignado(e2);
    	Asignacion plani2asig2=new Asignacion(turnoTarde);
    	plani2asig2.setEmpleadoAsignado(e3);
    	Asignacion plani2asig3=new Asignacion(turnoNoche);
    	plani2asig3.setEmpleadoAsignado(e1);
    	
    	Planificacion plani2 = new Planificacion(hoy.plusDays(1));
    	plani2.agregarAsignacion(plani2asig1);
    	plani2.agregarAsignacion(plani2asig2);
    	plani2.agregarAsignacion(plani2asig3);
    	tienda.agregarPlanificacion(plani2);
    	
    	//Tercera planificacion
    	Asignacion plani3asig1=new Asignacion(turnoMañana);
    	plani3asig1.setEmpleadoAsignado(e3);
    	Asignacion plani3asig2=new Asignacion(turnoTarde);
    	plani3asig2.setEmpleadoAsignado(e1);
    	Asignacion plani3asig3=new Asignacion(turnoNoche);
    	//plani3asig3.setEmpleadoAsignado(e2);
    	
    	Planificacion plani3 = new Planificacion(hoy.plusDays(2));
    	plani3.agregarAsignacion(plani3asig1);
    	plani3.agregarAsignacion(plani3asig2);
    	plani3.agregarAsignacion(plani3asig3);
    	tienda.agregarPlanificacion(plani3);
    
    	plani3.getAsignaciones().get(0).getEmpleadoAsignado();
    	
	}
	
    public static Result index() {
    	return ok(index.render("Planificaciones"));
    }
    
    public static Result planificaciones(){
    	response().setContentType("application/json");
    	if(firstRun){
    		populateDatabase();
    	}
    	Set<Planificacion> planificaciones = Tienda.getInstance().getPlanificaciones();
        
    	return ok(Json.toJson(planificaciones));
    }

    public static Result planificacion( Long planificacionIndex){
    	response().setContentType("aplication/json");
    	Planificacion planificacion;
    	Iterator<Planificacion> iterator = Tienda.getInstance().getPlanificaciones().iterator();	
    	for(int i = 0 ; i< planificacionIndex ; i++){
    		iterator.next();
    	}
    	planificacion = iterator.next();
    	return ok(Json.toJson(planificacion.getAsignaciones()));
    }

}
